NO.21 合并两个有序链表 简单 

思路一:迭代法 这个题目也是学校老师讲述数据结构课程时说的。1. 创建一个新的头结点dummy,用prehead指针指向新创建的dummy头结点,用p指针指向l1链表的头结点,q指针指向l2链表的头结点。2. 比较p指向的节点的值和q指向的节点的值,如果p指向的节点值小,就让prehead的next指向p所指向的节点,然后prehead和p向后移动,反之就让prehead的next指向q所指向的节点,然后prehead和q向后移动。3. 直到p或者q指针有一个为null为止,最后检查p或者q是否有不为null的指针,如果有就让prehead指向非空的p或者q。返回dummy.next即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
   | public ListNode mergeTwoLists(ListNode l1, ListNode l2) {         if (l1==null)return l2;         if (l2==null)return l1;         ListNode dummy=new ListNode(0);         ListNode prehead=dummy,p=l1,q=l2;         while (p!=null&&q!=null){             if (p.val<q.val){                 prehead.next=p;                 prehead=prehead.next;                 p=p.next;             }else {                 prehead.next=q;                 prehead=prehead.next;                 q=q.next;             }         }
          if (p!=null)prehead.next=p;         if (q!=null)prehead.next=q;         return dummy.next;     }
  | 
 
思路二:递归法 其实递归法不能算是第二个思路,只能说是思路一的另一种实现。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
   | public ListNode mergeTwoLists(ListNode l1, ListNode l2) {     if(l1 == null) {         return l2;     }     if(l2 == null) {         return l1;     }     if(l1.val < l2.val) {         l1.next = mergeTwoLists(l1.next, l2);         return l1;     } else {         l2.next = mergeTwoLists(l1, l2.next);         return l2;     } }
  | 
 
本人菜鸟,有错误请告知,感激不尽!
更多题解和学习记录博客:博客、github